#include <stdio.h>
#include <stdlib.h>

typedef struct Node {
    char data;              // 字母数据域
    struct Node *next;     // 指向下一个节点的指针
} Node, *LinkList;

// 创建由26个英文字母组成的单链表 参数为头指针
void CreateAlphabetList(LinkList L) {
    LinkList rear = L; // 初始化current指针 将其指向头结点
    for (char ch = 'A'; ch <= 'Z'; ch++) {
        LinkList newNode = (LinkList) malloc(sizeof(Node)); // 创建新节点
        if (newNode == NULL) {
            fprintf(stderr, "Memory allocation failed\n");
            return;
        }

        newNode->data = ch; // 为新节点赋值
        //尾插法
        newNode->next = NULL; // 新节点的next指向NULL
        rear->next = newNode; // 将新节点链接到链表
        rear = newNode; // 更新current指向新节点
    }
}

// 遍历并打印链表
void PrintList(LinkList L) {
    LinkList current = L->next; // 从头结点的下一个节点开始遍历
    while (current != NULL) {
        printf("%c -> ", current->data);
        current = current->next;
    }
    printf("NULL\n");
}

int main() {
    Node head;
    LinkList alphabetList =&head; // 定义链表头指针
    CreateAlphabetList(alphabetList); // 创建字母链表
    PrintList(alphabetList); // 打印链表

    // 释放链表的内存
    LinkList current = alphabetList->next; // 从第一个节点开始
    LinkList temp;
    while (current != NULL) {
        temp = current; // 保存当前节点
        current = current->next; // 移动到下一个节点
        free(temp); // 释放当前节点
    }
    return 0;
}
